<template>
  <div :style="{ width, height }"></div>
</template>

<script>
import echarts from 'echarts' // 引入主题
import resize from './mixins/resize' // 引入echarts
require('echarts/theme/macarons')
export default {
  mixins: [resize],
  name: '',
  data () {
    return {
      chart: null
      // $_sidebarElm: null, // sizebar根元素
      // $_resizeHandler: null // 更新图表的函数
    }
  },
  props: {
    width: {
      type: String,
      default: '100%'
    },
    height: {
      type: String,
      default: '350px'
    },
    chartData: {
      type: Object,
      required: true
    },
    yTittle: {
      type: String,
      required: true
    }
  },
  mounted () {
    // 使用echart画图的函数
    this.initChart()
  },

  // 为啥要监视，因为数据是异步传过来的
  watch: {
    chartData: {
      deep: true,
      handler (newVal) {
        this.setOption(newVal)
      }
    }
  },

  beforeDestroy () {
    if (!this.chart) {
      return
    }
    // 销毁实例，销毁后实例无法再被使用。
    this.chart.dispose()
    this.chart = null
  },

  methods: {
    initChart () {
      this.chart = echarts.init(this.$el, 'macarons')
      this.setOption(this.chartData)
    },

    setOption ({ expectedData = [], actualData = [] }) {
      this.chart.setOption({
        // 图表的标题
        // title: {
        //   text: "ECharts 入门示例",
        // },
        // 提示
        tooltip: {
          trigger: 'axis', // 坐标轴触发，主要在柱状图，折线图等会使用类目轴的图表中使用。
          axisPointer: {
            type: 'cross' // 坐标十字准星指示器。其实是种简写，表示启用两个正交的轴的 axisPointer
          }
        },

        // 图例
        legend: {
          data: ['期望', '实际']
        },
        // x坐标轴
        xAxis: {
          data: ['周一', '周二', '周三', '周四', '周五', '周六', '周日'],
          boundaryGap: false // x轴是否两遍不留白，和边缘重合
        },
        // y坐标轴，一般不写，最多写个y名称
        yAxis: {
          name: this.yTittle
        },
        // 网格，用来设置图标整体的大小的
        grid: {
          left: 10,
          right: 10,
          top: 40,
          bottom: 10,
          containLabel: true // 是否包含图标的坐标轴
        },

        // 系列  （图例和系列是配套的）
        series: [
          {
            name: '期望', // 和图例对应的
            type: 'line', // 决定了图的样子  是柱状图还是线状图还是饼状图
            data: expectedData, // 对应的是图的数据
            itemStyle: {
              color: 'red' // 修改整个图相关的颜色 不光是线，还有提示还有图例颜色都改了
            },
            lineStyle: {
              width: 4 // 只能修改线的颜色宽度等等
            }
          },
          {
            name: '实际',
            type: 'line',
            data: actualData,
            itemStyle: {
              color: 'blue'
            },
            lineStyle: {
              width: 4
            },
            areaStyle: {
              color: '#7581BD' // 修改区域的颜色
            }
          }
        ]
      })
    }
  }
}
</script>
